package org.dromara.exam.util;

import org.dromara.exam.domain.dto.TemplateSchema;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author xiyin321
 * @since 2025/2/5
 */
public class AttributeProcessUtils {
    /**
     * 根据 TemplateSchema 对象的类型处理并返回答案。
     *
     * @param templateSchema 需要处理的 TemplateSchema 对象
     * @return 处理后的答案字符串，格式取决于题目类型；若类型为空或无法处理，则返回 null
     */
    public static String processAnswer(TemplateSchema templateSchema) {
        // 获取题目的类型
        TemplateSchema.QuestionType type = templateSchema.getType();

        // 如果题型为空，直接返回 null
        if (type == null) {
            return null;
        }

        // 获取题目的子元素
        List<TemplateSchema> children = templateSchema.getChildren();

        // 如果子元素为空或为 null，返回 null
        if (children == null || children.isEmpty()) {
            return null;
        }

        // 根据题型处理答案
        return switch (type) {
            // 单选题或判断题
            case Radio, TrueFalse -> children.stream()
                // 过滤掉没有正确答案的选项
                .filter(child -> !(child.getAttribute().getExamCorrectAnswer() ==null))
                // 获取子元素的标题
                .map(TemplateSchema::getTitle)
                // 返回第一个正确选项的标题
                .findFirst()
                // 没有符合条件的选项时返回 null
                .orElse(null);

            // 多选题
            case Checkbox -> children.stream()
                .filter(child -> !(child.getAttribute().getExamCorrectAnswer() ==null))
                .map(TemplateSchema::getTitle)
                .collect(Collectors.joining(","));

            // 多项填空题
            case MultipleBlank,FillBlank -> children.stream()
                .filter(child -> !(child.getAttribute().getExamCorrectAnswer() ==null))
                .map(child -> child.getAttribute().getExamCorrectAnswer())
                .collect(Collectors.joining(","));

            // 文本题
            case Textarea -> children.stream()
                .filter(child -> !(child.getAttribute().getExamCorrectAnswer() ==null))
                .map(child -> child.getAttribute().getExamCorrectAnswer())
                .findFirst()

                .orElse(null);

            // 不支持的题型
            default -> null;
        };
    }
}
